package org.example.mytest.config;



import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class GlobalCorsConfig {

    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilter() {
        // 1. 配置跨域参数
        CorsConfiguration config = new CorsConfiguration();

        // 生产环境务必指定具体域名，避免使用*
        // 允许的前端域名（多个域名用逗号分隔）
        config.addAllowedOriginPattern("http://localhost:9528");  // 本地前端
        config.addAllowedOriginPattern("https://your-production-domain.com");  // 生产环境域名

        // 允许携带Cookie（配合前端withCredentials使用）
        config.setAllowCredentials(true);

        // 允许的请求方法（GET/POST等）
        config.addAllowedMethod("GET");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("OPTIONS");  // 允许预检请求

        // 允许的请求头（*表示允许所有）
        config.addAllowedHeader("*");

        // 允许前端获取的响应头（如自定义的token头）
        config.addExposedHeader("Authorization");
        config.addExposedHeader("X-Requested-With");

        // 预检请求的有效期（秒），减少重复预检
        config.setMaxAge(3600L);

        // 2. 配置URL匹配规则（对所有路径生效）
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        // 3. 注册过滤器并设置优先级（确保高于其他过滤器/拦截器）
        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);  // 最高优先级，优先于所有业务拦截器

        return bean;
    }
}
